﻿
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Data;
using PrintDrawing.BaseClassDraw;
using System.Windows.Controls.Primitives;
namespace PrintDrawing
{
    /// <summary>
    /// @DUNGPV - CMIS - Evnit : 17/10/2009
    /// Class chức năng giúp người dùng xem trước thiết kế in và in.
    /// </summary>
    public partial class PrintPreview : UserControl
    {
        Canvas currentCanvas = null;
        private int Count=0;
        int _currentPage = 0;
        event PropertyChange propertyChange;
        TabControl mainFrame = null;
        public int CurrentPage
        {
            get
            {
                return _currentPage;
            }
            set
            {
                _currentPage = value;
                if (propertyChange != null)
                    propertyChange(CurrentPage);
            }
        }

        DataTable _tblSource = null;
        
        public PrintPreview(DataTable source,TabControl main)
        {
            InitializeComponent();
            _tblSource = source;
            mainFrame = main;
            this.propertyChange += new PropertyChange(PrintPreview_propertyChange);
            this.Content.Children.Add(mainFrame);
            CurrentPage = 0;
        }
        
        // chưa có ý tưởng gì trường hợp họ dùng list Object thì sao nhỉ.
        /// <summary>
        /// @Create DUNGPV
        /// Mapping bản in với nguồn dữ liệu
        /// </summary>
        /// <param name="intPage" Type="INT">The intPage</param> Nguồn dữ liệu nhận vào
        public bool MapObject(int intPage)
        {
            if (_tblSource == null)            
                return false;            
            if (intPage >= _tblSource.Rows.Count)
                            return false;            

            foreach (TabItem item in mainFrame.Items)
                //get Border
                if(item.Content is Border)
                    if(((Border)item.Content).Child is Canvas){
                        currentCanvas = (Canvas)((Border)item.Content).Child;
                        //lấy được canvas map các đối tượng text box với nguồn
                        foreach(TextBoxDrawn txt in  currentCanvas.Children){
                            try
                            {
                                // đoạn này mình ko hiểu ý nghĩa của nameTable để làm gì.
                                txt.Text = _tblSource.Rows[intPage][txt.NameColumn].ToString();
                            }
                            catch { txt.Text = ""; }
                        }
                    }
            return true;
        }

        void HorScroll_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
        {
            if (currentCanvas != null)
            {
                currentCanvas.Margin = new Thickness(-((ScrollBar)sender).Value, currentCanvas.Margin.Top, 0, 0);
            }
        }

        void VerScroll_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
        {
            if (currentCanvas != null)
            {
                currentCanvas.Margin = new Thickness(currentCanvas.Margin.Left, -((ScrollBar)sender).Value, 0, 0);
            }
        }

        private void BtnNavigate_click(object sender, RoutedEventArgs e)
        {
            Button bt = (Button)sender;
            switch (bt.Name)
            {
                case "btnBack":
                    CurrentPage--;
                    break;
                case "btnBackEnd":
                    CurrentPage = 0;
                    break;
                case "btnNext":
                    CurrentPage++;
                    break;
                case "btnNextEnd":
                    CurrentPage = _tblSource.Rows.Count - 1;
                    break;
                default:
                    break;
            }
        }

        //event khi thay đổi current Page
        void PrintPreview_propertyChange(object pro)
        {
            int i = (Int32)pro;
            /// nếu i =0 Enable false Back, back end
            if (i == 0)
            {
                this.btnBack.IsEnabled = false;
                this.btnBackEnd.IsEnabled = false;
            }
            else if (i == _tblSource.Rows.Count - 1)
            {
                this.btnNext.IsEnabled = false;
                this.btnNextEnd.IsEnabled = false;
            }
            else
            {
                this.btnNext.IsEnabled = true;
                this.btnNextEnd.IsEnabled = true;
                this.btnBack.IsEnabled = true;
                this.btnBackEnd.IsEnabled = true;
            }

            //maping dữ liệu
            MapObject(i);
        }

    }    
}
